package com.maxio.controller;

import cn.dev33.satoken.stp.StpUtil;
import com.maxio.common.enums.ErrorCode;
import com.maxio.domain.R;
import com.maxio.domain.dto.Req.LoginReq;
import com.maxio.service.IUserService;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/")
public class LoginController {

    private final IUserService userService;

    /**
     * 账号密码登录
     */
    @ApiOperation(value = "账号密码登录")
    @PostMapping("/login")
    public R<?> login(@RequestBody LoginReq loginReq) {
        return R.ok(userService.login(loginReq));
    }

    /**
     * 注销登录
     */
    @ApiOperation(value = "注销登录")
    @PostMapping("/logout")
    public R<?> logout() {
        StpUtil.logout();
        return R.ok();
    }

    /**
     * 确认是否登录
     */
    @ApiOperation(value = "确认是否登录")
    @GetMapping("/isLogin")
    public R<?> isLogin() {
        return R.ok("当前用户是否已登录: " + StpUtil.isLogin());
    }

    /**
     * 校验当前用户是否已登录
     */
    @ApiOperation(value = "校验当前用户是否已登录")
    @GetMapping("/checkLogin")
    public R<?> checkLogin() {
        StpUtil.checkLogin();
        return R.ok();
    }

    /**
     * 获取当前登录用户ID(未登录抛出NotLoginException)
     */
    @ApiOperation(value = "获取当前登录用户ID(未登录抛出NotLoginException)")
    @GetMapping("/getLoginId")
    public R<?> getLoginId() {
        return R.ok("(默认类型)当前登录用户ID: " + StpUtil.getLoginId() + "\n" +
                        "(String类型)当前登录用户ID: " + StpUtil.getLoginIdAsString() + "\n" +
                        "(Long类型)当前登录用户ID: " + StpUtil.getLoginIdAsLong() + "\n" +
                        "(Int类型)当前登录用户ID: " + StpUtil.getLoginIdAsInt() + "\n",
                ErrorCode.SUCCESS.getMessage());
    }

    /**
     * 获取当前登录用户id(未登录返回Null)
     */
    @ApiOperation(value = "获取当前登录用户id(未登录返回Null)")
    @GetMapping("/getLoginIdDefaultNull")
    public R<?> getLoginIdDefaultNull() {
        return R.ok(StpUtil.getLoginIdDefaultNull());
    }

    /**
     * 获取指定token对应的登录id(未登录返回Null)
     */
    @ApiOperation(value = "获取指定token对应的登录id(未登录返回Null)")
    @GetMapping("/getLoginIdByToken/{tokenValue}")
    public R<?> getLoginIdByToken(@PathVariable String tokenValue) {
        return R.ok(StpUtil.getLoginIdByToken(tokenValue));
    }

    /**
     * 获取当前Token的Name
     */
    @ApiOperation(value = "获取当前Token的Name")
    @GetMapping("/getTokenName")
    public R<?> getTokenName() {
        return R.ok(StpUtil.getTokenName());
    }

    /**
     * 获取当前Token信息
     */
    @ApiOperation(value = "获取当前Token信息")
    @GetMapping("/getTokenInfo")
    public R<?> getTokenInfo() {
        return R.ok(StpUtil.getTokenInfo());
    }

    /**
     * 获取当前对话有效期
     */
    @ApiOperation(value = "获取当前对话有效期")
    @GetMapping("/getTokenTimeout")
    public R<?> getTokenTimeout() {
        return R.ok(StpUtil.getTokenTimeout());
    }



}
